package com.cac.demo.dao.gkLog;

import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Mapper
@Repository
public interface MsGkLogDao {
    //创建操作日志
    public int creatLog(@Param("bean") Map map, @Param("param") String param);

    //插入调用接口参数
    public int putLogParam(@Param("func") String func, @Param("param") String param, @Param("wmsTaskId") Object wmsTaskId, @Param("startCode") String startCode);

    //更新流程调用接口
    public int updateLogParam(@Param("func") String func, @Param("param") String param, @Param("wmsTaskId") Long wmsTaskId);

    //创建扫描位扫码时，创建日志
    public int updateBackLog(@Param("bean") Map map, @Param("param") String param);

    //更新操作日志中，确认货位时间
    public int updateGKLog(String ShelvesCode, Long wmsTaskId);

    //更新操作日志
    public int updateMsGKLog(@Param("map") Map map, @Param("param") String param);

    //查询wmsTaskId
    public HashMap selectWmsTaskId(String palletCode);

    //根据wmsTaskId查询是否为配送出库任务
    public HashMap isOutboundDelivery(@Param("wmsTaskId") Long wmsTaskId);

    //根据工作包id查询是否还存在未经过1066检查位的相同工作包id组的工作盘
    public int isNotPassPallet(@Param("map") HashMap packageId);

    //工作包经过1066位时，更新日志表信息
    public int updatePassPallet(@Param("wmsTaskId") Long wmsTaskId);

    //判断当前位置有多少未回库任务
    public int searchCountNotBack(@Param("location") String location);

    //根据父任务id查询子任务中的参数值（入库有阻挡位时操作）
    public HashMap selectWmsTaskIdByParentTaskId(Long ParentTaskId);

    //根据任务号查询日志
    public Page<HashMap> selectLog(@Param("bean") HashMap map, @Param("startTime") Date startTime,
                                   @Param("endTime") Date endTime);

    //根据任务号查询任务信息
    public HashMap selectLogData(@Param("wmsTaskId") Long wmsTaskId);

    //库外入库托盘编码，查询是否存在操作日志
    public int selectOutsideIn(@Param("palletCode") String palletCode);

    //处理异常结束
    public int updateAbnormalEnd(@Param("abnormalEnd") Map map);

    //查询当前超过3条任务占用巷道
    public List<String> selectOccupyRoadwayNo();

    //查询是否存在该托盘号未完成的任务
    public int selectUnSuccessTask(@Param("map") Map map);
    //2023-06-14 物料接收叫箱 获取当前箱是否下发给wcs
    public int selectUnSuccessTaskOnMaterialRece(@Param("map") Map map);

    //查询测试环境该缓存箱回库的位置
    public String selectTestBackShelves(@Param("map") Map map);

    //执行入库任务时，更新该箱子出库任务，is_back字段
    public int updateOutBoundTask(@Param("map") Map map);

    //获取已完成操作位缓存箱数量
    public int selecFinishtNum(@Param("map") HashMap map);

    //获取执行中操作位缓存箱数量
    public int selectOnWayNum(@Param("map") HashMap map);

    //待下发任务集合
    public List<HashMap> stayCallWCSTasks(@Param("map") HashMap map);

    //查询缓存箱在货架位置
    public HashMap searchShelvesCode(@Param("map") HashMap map);

    //修改任务开始位置，巷道
    int updateTask(@Param("map") HashMap map, @Param("wmsTaskId") String wmsTaskId);

    //待下发任务集合，分拣使用
    public List<HashMap> stayCallWCSTasksBySort(@Param("map") HashMap map);

    //查询下发任务的缓存箱是否在库内
    public String locationIsRigth(@Param("map") HashMap map);

    //分拣操作待下发任务
    public HashMap stayCallSortWCSTask(@Param("map") HashMap map);

    //更新下发时间
    public int updateOrderTime(@Param("map") Map map);

    //判断是否存在已完成的接收出库任务，并且创建了回库任务指令日志，执行回库操作。
    public HashMap backTask(@Param("map") HashMap map);

    //是否存在分拣操作中，分拣结束位置未经过1066点的任务
    public int isSortPassTask(@Param("map") HashMap map);

    //根据任务号，查询分拣操作流量控制所需任务信息
    public HashMap searchCallControlData(@Param("wmsTaskId") Long wmsTaskId);

    /**
     * yebo  处理挨着的缓存箱是一个的情况
     **/
    List<HashMap> queryRepeatGkLog(@Param("map") Map map);

    int updateRepeatGkLog(@Param("map") Map map);

    List<HashMap> queryRepeatWorkbin(@Param("map") Map map);

    int updateWorkbinFinish(@Param("map") Map map);

    int updateWorkbinOper(@Param("map") Map map);


    //创建移库时,出库任务记录操作日志---加入父亲任务id
    public int updateLogForMove(@Param("map") Map map);

    //查询优先配送工作包集合
    public List<HashMap> searchPriorTool();

    //工作包分拣完成回库后，查询下一个工作包id
    public HashMap nextPackage(@Param("map") Map map);

    //根据任务id，查询该任务id是否已分配过货位
    public HashMap isGetLocation(@Param("wmsTaskId") Object wmsTaskId);

    //修改重复箱子优先级最高的任务，为完成状态
    public int updateWorkBinTask(@Param("map") HashMap map);

    //查询该工作包盘编码，是否存在属于分拣操作的任务
    public List<HashMap> unCallSortTask(@Param("map") HashMap map);

    //更新日志表中的起始位置
    public int updateStartCodeByTaskId(@Param("map") HashMap map);

    //判断操作台是否有正在进行的分拣任务
    public int sortingTask(@Param("IP") String IP);

    //获取操作台最前端的工作包盘任务
    public List<HashMap> sortFirstTool(@Param("IP") String IP);

    //获取操作台最前端的缓存箱任务
    public List<HashMap> sortFirstWorkBin(@Param("IP") String IP);

    //查询当前未完成日志
    public Page<HashMap> searchLog(@Param("IP") String IP);

    //修改接收位出库任务缓存箱未正常回库任务：is_back->'Y'
    Integer updateUnBackTask(@Param("palletCode") String palletCode);

    //更改任务占位
    Integer updateOccupyTask(@Param("ID") String ID);

    //查询当前位置出库任务
    List<HashMap> queryGkLog(@Param("ip") String ip);
    //更新大件箱子任务
    int updateBigWorkbin(@Param("ip") String ip);

}
